#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */

// #define TEST

#include <stdlib.h>      // for exit()
#include <unistd.h>     // for sleep()
#include <stdio.h>
#include <string.h>

#include "main_core.h"
#include "thread.h"
#include "socket.h"
#include "appl_thread.h"
#include "user.h"

#include "window.h"


int Init(int argc, char* argv[]);
int CalPort(const char* ip);

int main_core(int argc, char* argv[])
{

    // initscr(); //initialize screen 初始化屏幕
    // g_win.owner = &self;

    //创建三个线程，一个控制头，一个控制中间输出的线程，一个控制输入的线程
	// pthread_t theader, toutput_fl, tinput;
	// pthread_create(&theader, NULL, show_header, NULL);
	// pthread_create(&toutput_fl, NULL, show_output_fl, NULL);
	// pthread_create(&tinput,NULL, show_input, NULL);
	
	// pthread_join(theader, NULL);
	// pthread_join(toutput_fl, NULL);
	// pthread_join(tinput, NULL);


    if(Init(argc, argv) < 0)
    {
        perror("init fail\n");
        return -1;
    }

    pthread_t* ths = thread_create();
    thread_wait(ths);


	return 0;

}

int Init(int argc, char* argv[])
{
	//将接收ip号并计算port
    if(argc < 2) 
    {
        perror("断网了\n");
        return -1;
    }

    int port = CalPort(argv[1]);
    const char* uname = argv[2];

#ifdef TEST
    port = atoi(argv[3]);
#endif
	printf("lan ip  = %s\n", g_ip);
	printf("my port = %d\n", port);
    if (port < 1025 || port > 65535) //0~1024一般给系统使用，一共可以分配到65535
    {
        printf("端口号范围应为1025~65535");
        return -1;
    }
    g_port = port;


    Sems_Init();
    Sock_Init();
    User_Init(port, uname);

	return 0;
}

int CalPort(const char* ip)
{
	int port = 8000;
    int offset = 0, dot = 0;
    
    strcpy(g_ip, ip);

    for(int i = 0; ip[i]; i++){
        if(ip[i] == '.'){
            dot++;
            if(dot == 3){
                g_ip[i + 1] = 0;
                strcat(g_ip, "255");
            } 
        }
        else if(dot == 3){
            offset = offset * 10 + (ip[i] - '0');
        }
    }
	return port + offset;
}


#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
